刷Lintcode,乱序字符(1)

2016-12-21  本文已影响0人  2a25936eedd9

这是一道中等难度的字符串题目。本来按照我的想法,我觉得逻辑上没有问题,但是出在JAVA上的细节问题。虽然,我的逻辑方法自己觉得很生硬。

题目

给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。

样例

对于字符串数组["lint","intl","inlt","code"]

返回["lint","inlt","intl"]

我的想法

1.首先通过length,即字符串的长度,从开始扫描,找到长度一致的字符串,然后再比较是否是乱序的。

2.如何比较是否是乱序的呢,我的想法是只要是组成这两个字符串的字符是相同的,就算。那么如何比较两个字符串的字符是否相同呢? 我的想法是通过两个for循环比较,声明两个String []变量,比较这两个。

代码





import java.util.List;

import java.lang.instrument.*;

public class Solution {

public static String[] iteration;

public static String[] temp;

public static String[] compare;

Solution() {};

private static void swap(int i, int j) {

}

private  boolean isthesame(String[] a, String[] b) {

for ( int i = 0 ; i < a.length; i ++) {

for ( int j = i; j < b.length; j++) {

if(b[j]==a[i]) {

String tempo = b[j];

b[j] = b[i];

b[i] = tempo;

break;

}

if (j == b.length -1) {

return false;

}

}

}

return true;

}

public String[] anagrams(String[] strs) {

int n = strs.length;

for(int i = 0; i < n; i++) {

for(int j = i + 1; j < n; j++) {

if(strs[j].length() == strs[i].length() ) {

for (int z = 0; z < strs[j].length(); z++) {

this.temp[z]=strs[j].substring(z, z+1);

this.compare[z] = strs[i].substring(z, z+1);

}

}

if (isthesame(this.compare,this.temp)) {

this.iteration[j] = strs[j];

}

}

if(this.iteration.length != 0) {

this.iteration[0] = strs[i];

break;

}

}

return this.iteration;

}

public static void main(String[] args) {

Solution ss = new Solution();

String[]  s={"lint","intl","inlt","code"};

try{ss.anagrams(s);}

catch(Exception e) {

System.out.print("error");

}

}

}

调用结果老是出错,我自己测试了一下,应该是错在this.iteration[j] = strs[j];这样的赋值步骤上,由于我还是JAVA新手,这种细节还是不太懂,为什么不能这样赋值呢?

问题:

虽然我自觉想法没错,但是我还是认为这种暴力解法没有优化,接下来继续想更好的方法。

上一篇下一篇

猜你喜欢

热点阅读