【问题标题】:how to shift strings from one array to another in java?如何在java中将字符串从一个数组转移到另一个数组?
【发布时间】:2013-01-01 22:31:48
【问题描述】:

我有两个数组,一个叫做单词,另一个叫做数据。我无法将字符串从数据转换为单词。到目前为止我有

    public String[] shiftRightX(String[] words, String[] data)
    {

        for(int i= words.length - 1; i>0; i--)
        {
            words[i]=words[i-1];
            for (int x = 0; x < data.length; x++)
            {
                words [0] = data[x];
            }
        }  
        return words;  
    }

它应该导致例如:

    shiftRightX({"1", "2", "3"}, {"1", "2"}) → {"2", "1", "1"}
    shiftRightX({"1", "2", "3"}, {"1"}) → {"1", "1", "2"}
    shiftRightX({"1", "2"}, {"1", "2"}) → {"2", "1"}

但是,它在最后移动了一个额外的时间。

【问题讨论】:

  • 将字符串从数据转换为单词?你是说抄袭吗?
  • 你能定义什么是shifting吗?不清楚你想得到什么结果。
  • 另一条评论:为什么是 x-loop?为什么不只是“words[0] = data[data.length-1]”?
  • 我认为他试图将值从一个数组添加到另一个数组?像php的unshift()函数。
  • 它应该做的就是将数组单词中的所有内容向右移动,将单词 [0] 替换为 [0] 处的数据,然后再次移位并将单词 [0] 替换为数据 [1] 等. 直到所有来自数据的东西都变成了文字。

标签: java arrays string shift


【解决方案1】:

更快的版本:

public String[] shiftRightX(String[] words, String[] data)
{
  if (data.length < words.length)
     System.arraycopy(words, 0, words, data.length, words.length - data.length);
  for (int i = Math.max(0, data.length - words.length); i < data.length; i++)
     words[data.length - i - 1] = data[i];
  return words;
}

【讨论】:

    【解决方案2】:

    尝试交换循环:

    public String[] shiftRightX(String[] words, String[] data)
    {
        for (int x = 0; x < data.length; x++)
        {
            for(int i= words.length - 1; i>0; i--)
            {
                words[i]=words[i-1];
            } 
            words[0] = data[x];
        } 
        return words;  
    }
    

    但是这个算法可以改进。现在它的复杂度是 O(n*m) 但如果将 words 数组中的元素移动到 data.length 位置而不是 1,它可以提高到 O(n + m)。但是在这种情况下你需要更加小心,因为你可以得到ArrayOutOfBoundException

    【讨论】:

      【解决方案3】:

      认为你想要做的是这样的:

       public String[] shiftRightX(final String[] words, final String[] data){
              String[] result = new String[words.length];
              int i = 0;
              for(String str : data){
                  result[i] = str;
                  i++;
              }
              for(int j=0;i<words.length;j++){
                  result[i] = words[j];
                  i++;
              }
              return result;
          }
      

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        • 2013-06-22
        • 2018-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多